package Controller;

import java.awt.Component;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;

import javax.faces.application.FacesMessage;
import javax.faces.component.behavior.AjaxBehavior;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import javax.servlet.http.HttpServletRequest;

import DAO.MensagemDAO;
import DAO.PacienteDAO;
import Model.Mensagem;
import Model.TipoMensagem;
import Model.Usuario;

public class MensagemControl {
	private int idMensagem;
	private String textoMensagem;	
	private String tituloMensagem;
	private Date dataEmissao;
	private int cdStatus;	
	
	/* 
	 * Atributos relacionados
	 *  */
	private Usuario remetente;
	private Usuario destinario; 
	private TipoMensagem tipoMensagem;	
	
	/**
	 * @return the idMensagem
	 */
	public int getIdMensagem() {
		return idMensagem;
	}
	/**
	 * @param idMensagem the idMensagem to set
	 */
	public void setIdMensagem(int idMensagem) {
		this.idMensagem = idMensagem;
	}
	/**
	 * @return the textoMensagem
	 */
	public String getTextoMensagem() {
		return textoMensagem;
	}
	/**
	 * @param textoMensagem the textoMensagem to set
	 */
	public void setTextoMensagem(String textoMensagem) {
		this.textoMensagem = textoMensagem;
	}
	/**
	 * @return the tituloMensagem
	 */
	public String getTituloMensagem() {
		return tituloMensagem;
	}
	/**
	 * @param tituloMensagem the tituloMensagem to set
	 */
	public void setTituloMensagem(String tituloMensagem) {
		this.tituloMensagem = tituloMensagem;
	}
	/**
	 * @return the dataEmissao
	 */
	public Date getDataEmissao() {
		return dataEmissao;
	}
	/**
	 * @param dataEmissao the dataEmissao to set
	 */
	public void setDataEmissao(Date dataEmissao) {
		this.dataEmissao = dataEmissao;
	}
	/**
	 * @return the cdStatus
	 */
	public int getCdStatus() {
		return cdStatus;
	}
	/**
	 * @param cdStatus the cdStatus to set
	 */
	public void setCdStatus(int cdStatus) {
		this.cdStatus = cdStatus;
	}
	/**
	 * @return the remetente
	 */
	public Usuario getRemetente() {
		return remetente;
	}
	/**
	 * @param remetente the remetente to set
	 */
	public void setRemetente(Usuario remetente) {
		this.remetente = remetente;
	}
	/**
	 * @return the destinario
	 */
	public Usuario getDestinario() {
		return destinario;
	}
	/**
	 * @param destinario the destinario to set
	 */
	public void setDestinario(Usuario destinario) {
		this.destinario = destinario;
	}
	/**
	 * @return the tipoMensagem
	 */
	public TipoMensagem getTipoMensagem() {
		return tipoMensagem;
	}
	/**
	 * @param tipoMensagem the tipoMensagem to set
	 */
	public void setTipoMensagem(TipoMensagem tipoMensagem) {
		this.tipoMensagem = tipoMensagem;
	}
	
	public ArrayList<Mensagem> getListaMensagensEnviadas() {
		Usuario objUsuario = (Usuario) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("currentUser");
		return MensagemDAO.getArrayListMensagensEnviadas(objUsuario.getIdUsuario());
	}
	
	public ArrayList<Mensagem> getListaMensagensRecebidas () {
		Usuario objUsuario = (Usuario) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("currentUser");
		return MensagemDAO.getArrayListMensagensRecebidas(objUsuario.getIdUsuario());
	}
	
	public String VizualizarMensagemRecebida()
	{		
		Usuario objUsuario = (Usuario) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("currentUser");
		HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
		int id_mensagem = Integer.parseInt(request.getParameter("idmensagem"));		
		try
		{
			Mensagem mensagem = MensagemDAO.LoadObject(id_mensagem, objUsuario.getIdUsuario());			
			this.setTituloMensagem(mensagem.getTituloMensagem());
			this.setTextoMensagem(mensagem.getTextoMensagem());
			this.dataEmissao = mensagem.getDataEmissao();
			this.cdStatus = mensagem.getCdStatus();
			this.remetente = mensagem.getRemetente();
			this.tipoMensagem = mensagem.getTipoMensagem();
			this.destinario = mensagem.getDestinatario();
			this.idMensagem = mensagem.getIdMensagem();
			
			return "mensagem_recebida_vizualizar";
		}
		catch (Exception e) {
			e.printStackTrace();	
			return "mensagens_recebidas_list";
		}
		
	}
	
	public String VizualizarMensagemEnviada()
	{		
		Usuario objUsuario = (Usuario) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("currentUser");
		HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
		int id_mensagem = Integer.parseInt(request.getParameter("idmensagem"));		
		try
		{
			Mensagem mensagem = MensagemDAO.LoadObject(id_mensagem, objUsuario.getIdUsuario());			
			this.setTituloMensagem(mensagem.getTituloMensagem());
			this.setTextoMensagem(mensagem.getTextoMensagem());
			this.dataEmissao = mensagem.getDataEmissao();
			this.remetente = mensagem.getRemetente();
			this.tipoMensagem = mensagem.getTipoMensagem();
			this.destinario = mensagem.getDestinatario();
			this.idMensagem = mensagem.getIdMensagem();
			
			return "mensagem_enviada_vizualizar";
		}
		catch (Exception e) {
			e.printStackTrace();	
			return "mantermensagem_list";
		}
	}
	
	public void MudarStatusMensagem(ValueChangeEvent event)
	{
		try
		{
			HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
			int idMensagem =  Integer.parseInt(request.getParameter("idMensagem"));
			int idStatus = (Integer) event.getNewValue();
			MensagemDAO.AlterarStatusMensagem(idMensagem, idStatus);
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
		 
	}
	
	public String InativarMensagemRecebida()
	{
		HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();		
		int id =  Integer.parseInt(request.getParameter("idmensagem"));
		
		try
		{
			MensagemDAO.InativarMensagemRecebida(id);
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("sucesso", new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso!", "Informações apagadas com sucesso"));			
		}
		catch(SQLException sexc)
		{
			sexc.printStackTrace();
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("erro", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro!", "Ocorreu um problema ao realizar a transação, contate o administrador do sistema"));
		}		
		return "mensagens_recebidas_list";
	}
	
	public String InativarMensagemEnviada()
	{
		HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();		
		int id =  Integer.parseInt(request.getParameter("idmensagem"));
		
		try
		{
			MensagemDAO.InativarMensagemEnviada(id);
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("sucesso", new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso!", "Informações apagadas com sucesso"));			
		}
		catch(SQLException sexc)
		{
			sexc.printStackTrace();
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("erro", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro!", "Ocorreu um problema ao realizar a transação, contate o administrador do sistema"));
		}		
		return "mantermensagem_list";
	}
	
}
